<?php

/**
 * 上传类
 */
class Upload 
{	
	//配置
	public $config = [
		'root'=>'./uploads',
		'size'=>2000000,
		'allow'=>['image/jpeg','image/gif','image/png'],
	];
	//错误代码对应的提示
	public $errorNotice =[
		1=>'上传的文件超过了 php.ini 中 upload_max_filesize选项限制的值',
		2=>'上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值',
		3=>'文件只有部分被上传',
		4=>'没有文件被上传',
		6=>'找不到临时文件夹',
		7=>'文件写入失败'
	];
	//存储错误信息
	public $errorInfo;
	// 存储文件
	public $file;
	
	public function save()
	{
		try {
			$this->doData();
			$this->checkError();
			$this->checkType();
			$this->checkSize();
			return $this->moveFile();
			
		} catch (Exception $e) {
			return false;
		}
		// //todo:: 接文件
		// // $this->doData() || return false;
		// if(!$this->doData()) return false; 
		// //todo:: 判断 错误代码
		// if(!$this->checkError()) return false;
		// //todo:: 检测类型
		// if(!$this->checkType()) return false;
		// //todo:: 检测大小
		// if(!$this->checkSize()) return false;
		// //todo:: 移动文件
		// return $this->moveFile();
	}

	protected function doData()
	{
		if(!$_FILES){
			$this->errorInfo = "没有接收到文件";
			throw new Exception("Errort", 1);
			
		}

		$this->file=current($_FILES);
		return true;
	}

	protected function checkError()
	{
		if($this->file['error']>0){
			$this->errorInfo = $this->errorNotice[$this->file['error']];
			throw new Exception("Errort", 1);
		}
		return true;
	}

	protected function checkType()
	{
		if(!in_array($this->file['type'],$this->config['allow'])){
			$this->errorInfo= "类型不符合要求";
			throw new Exception("Errort", 1);
		}
		return true;
	}
	protected function checkSize()
	{
		if($this->file['size']>$this->config['size']){
			$this->errorInfo= "文件太大,允许的大小".$this->config['size'];
			throw new Exception("Errort", 1);
		}
		return true;
	}

	protected function moveFile()
	{
		// 创建目录
		is_dir($this->config['root']) || mkdir($this->config['root']);
		//切割数组 
		$arr = explode('.',$this->file['name']);
		// // 取最后一项
		$suffiux = end($arr);
		// //生成一个唯一id文件名
		$name = uniqid().".".$suffiux;
		// 组移动路径
		$url = $this->config['root'].'/'.$name;
		// 判断是否合法文件
		if(is_uploaded_file($this->file['tmp_name'])){
			// 移动上传文件
			move_uploaded_file($this->file['tmp_name'],$url);

			return $url;

		}else{
			$this->errorInfo ="非合法上传文件";
			return false;
		}
	}
}